/**
 * 首屏动画页面
 */
import 'package:flutter_benchu/utils/commonPkg.dart';
import 'package:flustars/flustars.dart';

// 背景图组件
import './widgets/bgImage.dart';

 // 1. 首页动画执行完毕 转换静态图
 // 2. 数据返回时间比动画还要快 那么就把跳转时机交给动画结束后
 // 3. 5秒钟数据还没有结果 直接跳转
 
class SplashPage extends StatefulWidget  {
  @override
  State<StatefulWidget> createState() => _SplashPageState();
}

class _SplashPageState extends State<SplashPage> with EnhanceLifeCycialMixin  {
  // 倒计时
  TimerUtil _timer = TimerUtil(mInterval: 1000, mTotalTime: defaultSplashTime.inMilliseconds);
  // 首屏动画是否结束 （结束后换成静态图）
  bool loaded = false;
  // 数据请求是否结束
  bool dataloaded = false;

  @override
  void initState() {
      super.initState();
      //ben:修改顶部状态朗颜色
      SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark.copyWith(statusBarColor: Colors.transparent));
      // 首屏动画定时器
      _starTtimer();
  }

  // 需要 context 的写在layoutDidMount里
  @override
  void layoutDidMount(BuildContext context) async {
    _asyncInitial(context);          //获取数据
  }

  // 首屏动画定时器
  _starTtimer() {
    // 定时任务
    _timer.setOnTimerTickCallback((int time) {
      if (time > 0) return;
      // 定时结束
      setState(() {
        loaded = true;
        // 数据准备完毕直接跳转
        if(!dataloaded) return; 
        goPage();
      });
    });

    // 启动定时器
    _timer.startCountDown();
  }

  // 初始化调用 走接口获取app必要的数据
  _asyncInitial(BuildContext context) async {
    await userServices.asyncInitData(context);        //获取渲染页面必要的数据
    setState(() {
      dataloaded=true;
      if(!loaded)return;
      goPage();
    });
  }

  // 跳转到首页或者 首次加载的页面
  goPage() async {
    _timer?.cancel(); 
    appRouter.navigateTo(context, Routes.tab, replace: true);
  }

  @override
  Widget build(BuildContext context) {
    
    return WillPopScope(
      onWillPop: (){},
      child:Scaffold(
        body: BgImage(
          loaded: loaded,
          splashGif: ImageAssets.splashGif,
          splashPng: ImageAssets.splashPng,
        ),
      )
    );
  }
}
